home *** CD-ROM | disk | FTP | other *** search
- #include "apl2c_h.h"
-
- void main(void);
-
- void main (void)
- {
- unsigned int aplcs,left,right;
- int elems,pars,bytes;
- int rsbarg[4];
- struct aplvhdr rarg,result;
-
- aplcs = apl_cs();
- right = peek(aplcs,0x80);
- left = peek(aplcs,0x82);
-
- rsbarg[2] = 0,rsbarg[3] = 0; /* define default values */
- /* (will force empty result */
- /* .if error occurs) */
-
- rarg.ptr = right; /* load segment value into $PTR field */
- apl_vhdr(&rarg); /* load up header info */
-
- if( (rarg.type == 1) && (rarg.rank == 1) && (rarg.dimens[0] == 4) )
- apl_vfdata(&rarg,(char far *)rsbarg); /* if okay,load data */
-
- svp_relm(rarg.ptr); /* release right arg stuff */
-
- result.type = 3; /* res type = char */
- result.rank = 2; /* two dim array */
- result.dimens[0] = rsbarg[2]; /* 1st dim=#rows */
- result.dimens[1] = rsbarg[3]; /* 2nd dim=#cols */
-
- elems = rsbarg[2] * rsbarg[3];
- bytes = elems;
- pars = 1 + bytes / 16;
- result.ptr = svp_getm(pars);
- bytes = pars * 16;
- result.nb = bytes;
- result.nelm = elems;
-
- vhdr_apl(&result); /* put hdr data where APL will find */
- rsb( MK_FP(result.ptr,12),
- rsbarg[0],rsbarg[1],rsbarg[2],rsbarg[3]);
-
- poke(aplcs,0x80,result.ptr); /* result ptr to APL */
- poke(aplcs,0x82,0); /* 0 out unused arg ptr */
-
- }
-
-
- /*
- RSB.C - read screen block
- */
-
- void rsb(char far *,int,int,int,int);
-
- void rsb(bufr,srow,scol,nrows,ncols)
- char far * bufr;
- int srow,scol,nrows,ncols;
- {
- long vidoffset,rowstart,posn;
- int i,j;
- char mon_type;
-
- mon_type = *(char far *) 0x00400049;
- if(mon_type == 7) /* mono */
- vidoffset = 0xb0000000;
- else
- vidoffset = 0xb8000000;
-
- rowstart = vidoffset + srow * 160; /* row start for first */
- rowstart += 2 * scol; /* row of block */
- for(i = 0;i < nrows;i ++)
- { posn = rowstart;
- for(j = 0;j < ncols;j ++)
- { *bufr++ = *(char far *)posn;
- posn += 2; /* next char */
- }
- rowstart += 160; /* next row */
- }
- }